package cn.itcast.jvm;

import com.sun.org.apache.bcel.internal.classfile.SourceFile;

import java.io.PrintStream;

/**
 * @Created on 2021/4/15.
 * @Author by zbk
 * @Description:
 */
public class Stringtable {


    // 反编译后得到如下：

//    Classfile /D:/IdeaProjects/jvm/jvm/out/production/jvm6/cn/itcast/jvm/Stringtable.class
//    Last modified 2021-4-15; size 564 bytes
//    MD5 checksum 0ee2c23c8bfc773505c63dd306f8c362
//    Compiled from "Stringtable.java"
//    public class cn.itcast.jvm.Stringtable
//    minor version: 0
//    major version: 50
//    flags: ACC_PUBLIC, ACC_SUPER
//    Constant pool:
//            #1 = Methodref          #6.#20         // java/lang/Object."<init>":()V
//            #2 = Fieldref           #21.#22        // java/lang/System.out:Ljava/io/PrintStream;
//            #3 = String             #23            // hello world
//            #4 = Methodref          #24.#25        // java/io/PrintStream.println:(Ljava/lang/String;)V
//            #5 = Class              #26            // cn/itcast/jvm/Stringtable
//            #6 = Class              #27            // java/lang/Object
//            #7 = Utf8               <init>
//   #8 = Utf8               ()V
//   #9 = Utf8               Code
//  #10 = Utf8               LineNumberTable
//  #11 = Utf8               LocalVariableTable
//  #12 = Utf8               this
//            #13 = Utf8               Lcn/itcast/jvm/Stringtable;
//  #14 = Utf8               main
//  #15 = Utf8               ([Ljava/lang/String;)V
//  #16 = Utf8               args
//  #17 = Utf8               [Ljava/lang/String;
//  #18 = Utf8               SourceFile
//  #19 = Utf8               Stringtable.java
//  #20 = NameAndType        #7:#8          // "<init>":()V
//            #21 = Class              #28            // java/lang/System
//            #22 = NameAndType        #29:#30        // out:Ljava/io/PrintStream;
//            #23 = Utf8               hello world
//  #24 = Class              #31            // java/io/PrintStream
//            #25 = NameAndType        #32:#33        // println:(Ljava/lang/String;)V
//            #26 = Utf8               cn/itcast/jvm/Stringtable
//  #27 = Utf8               java/lang/Object
//  #28 = Utf8               java/lang/System
//  #29 = Utf8               out
//  #30 = Utf8               Ljava/io/PrintStream;
//  #31 = Utf8               java/io/PrintStream
//  #32 = Utf8               println
//  #33 = Utf8               (Ljava/lang/String;)V
//    {
//  public cn.itcast.jvm.Stringtable();
//        descriptor: ()V
//        flags: ACC_PUBLIC
//        Code:
//        stack=1, locals=1, args_size=1
//        0: aload_0
//        1: invokespecial #1                  // Method java/lang/Object."<init>":()V
//        4: return
//            LineNumberTable:
//        line 8: 0
//        LocalVariableTable:
//        Start  Length  Slot  Name   Signature
//        0       5     0  this   Lcn/itcast/jvm/Stringtable;
//
//        public static void main(java.lang.String[]);
//        descriptor: ([Ljava/lang/String;)V
//        flags: ACC_PUBLIC, ACC_STATIC
//        Code:
//        stack=2, locals=1, args_size=1
//        0: getstatic     #2    【对应常量池的编号】              // Field java/lang/System.out:Ljava/io/PrintStream;
//        3: ldc           #3                  // String hello world
//        5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
//        8: return
//            LineNumberTable:
//        line 12: 0
//        line 14: 8
//        LocalVariableTable:
//        Start  Length  Slot  Name   Signature
//        0       9     0  args   [Ljava/lang/String;
//    }
//    com.sun.org.apache.bcel.internal.classfile.SourceFile: "Stringtable.java"


    public static void main(String[] args) {

        System.out.println("hello world");

        String s1 = "ab";
        String s2 = "a";
        String s3 = "b";
        String s = "b";
        String s4 = s1 + s2;
        String s7 = "a" + "b";
        String s5 = s4.intern();
        System.out.println(s7 == s1);


    }
}
